knitr::opts_knit$set(root.dir = dirname(getwd()))
d.img = "./data/xrays/20191017_Xray_Pollock01-06/" #xray folder
d.sh = "./data/xrays/shapes" #shapes folder
d.krm = "./results/KRM"
sp="Pollock"
library(KRMr)
## Warning: vorhergehender Import 'ggplot2::last_plot' durch 'plotly::last_plot'
## während des Ladens von 'KRMr' ersetzt
## Warning: vorhergehender Import 'DT::dataTableOutput' durch
## 'shiny::dataTableOutput' während des Ladens von 'KRMr' ersetzt
## Warning: vorhergehender Import 'DT::renderDataTable' durch
## 'shiny::renderDataTable' während des Ladens von 'KRMr' ersetzt
library(imager)
library(ggplot2)
imfns = list.files(path=d.img,pattern=".jpg", full.names = T)
frequency=(12:300)*1e3 #frequencies Hz
theta = seq(65,115) #orientations
c.w = 1490 #Ambient water m/s
rho.w = 1026.8 #density ambient water kg/m3
c.fb=1570 #soundspeed body
c.b=345 #soundspeed swimbladder
cs = c(c.fb, c.b)
rho.fb=1070 #density body kg/m3
rho.b=1.24 #density swimbladder kg/m3
rhos = c(rho.fb, rho.b)
L = c(29.7,24.1,36,34.2,23.9,33.9)/1e2 #Lengths for pollocks in m
imfns = list.files(path=d.img,pattern=".jpg", full.names = T)
par(mfrow=c(1,2))
plot(load.image(imfns[1]))
plot(load.image(imfns[2]))
shp1 = KRMr::Imagej2shp(shp=read.csv(paste0(d.sh,"/", sp, "01.csv")))
KRMr::get_shp3d(shp1)
## 2023-02-25 18:49:34:2 Body parts detected
ofn = paste0(d.krm,"/krm_", sp, "_01.csv") #output filename
if(file.exists(ofn)==F){
#Run KRM
krm1 = krm(frequency = frequency,
c.w = c.w,
rho.w = rho.w,
theta = theta,
cs =cs,
rhos = rhos,
shape = shp1,
modes = c("fluid","soft"),
L = L[1],
fb = 1)
write.csv(krm1,ofn)
}else{krm1 = read.csv(ofn)}
Plot result:
plot_res = function(data=krm1, lims=c(-60,-30)){
ggplot(data=data, aes(x=frequency/1e3, y=theta, fill=TS))+
geom_tile()+
scale_fill_gradientn(colors=rev(pals::brewer.spectral(15)),
limits=lims, oob=scales::squish,
name=expression(TS~"(dB re 1"*m^2*")"))+
scale_x_continuous(expand=c(0,0))+
scale_y_continuous(expand=c(0,0))+
ylab(expression(theta~"(°)"))+
xlab("Frequency (kHz)")+
theme_classic()+
theme(legend.position = "bottom",
text=element_text(size=16),
legend.key.width = unit(2, 'cm'))
}
plot_res(krm1,c(-60,-30))
par(mfrow=c(1,2))
plot(load.image(imfns[3]))
plot(load.image(imfns[4]))
shp2 = KRMr::Imagej2shp(shp=read.csv(paste0(d.sh,"/", sp, "02.csv")))
KRMr::get_shp3d(shp2)
## 2023-02-25 18:49:47:2 Body parts detected
ofn = paste0(d.krm,"/krm_", sp, "_02.csv") #output filename
if(file.exists(ofn)==F){
#Run KRM
krm2 = krm(frequency = frequency,
c.w = c.w,
rho.w = rho.w,
theta = theta,
cs =cs,
rhos = rhos,
shape = shp1,
modes = c("fluid","soft"),
L = L[2],
fb = 1)
write.csv(krm2,ofn)
}else{krm2 = read.csv(ofn)}
Plot result:
plot_res(krm2,c(-60,-30))
par(mfrow=c(1,2))
plot(load.image(imfns[5]))
plot(load.image(imfns[6]))
shp3 = KRMr::Imagej2shp(shp=read.csv(paste0(d.sh,"/", sp, "03.csv")))
KRMr::get_shp3d(shp3)
## 2023-02-25 18:50:00:2 Body parts detected
ofn = paste0(d.krm,"/krm_", sp, "_03.csv") #output filename
if(file.exists(ofn)==F){
#Run KRM
krm3 = krm(frequency = frequency,
c.w = c.w,
rho.w = rho.w,
theta = theta,
cs =cs,
rhos = rhos,
shape = shp1,
modes = c("fluid","soft"),
L = L[3],
fb = 1)
write.csv(krm3,ofn)
}else{krm3 = read.csv(ofn)}
Plot result:
plot_res(krm3,c(-60,-30))
par(mfrow=c(1,2))
plot(load.image(imfns[7]))
plot(load.image(imfns[8]))
shp4 = KRMr::Imagej2shp(shp=read.csv(paste0(d.sh,"/", sp, "04.csv")))
KRMr::get_shp3d(shp4)
## 2023-02-25 18:50:13:2 Body parts detected
ofn = paste0(d.krm,"/krm_", sp, "_04.csv") #output filename
if(file.exists(ofn)==F){
#Run KRM
krm4 = krm(frequency = frequency,
c.w = c.w,
rho.w = rho.w,
theta = theta,
cs =cs,
rhos = rhos,
shape = shp1,
modes = c("fluid","soft"),
L = L[4],
fb = 1)
write.csv(krm4,ofn)
}else{krm4 = read.csv(ofn)}
Plot result:
plot_res(krm4,c(-60,-30))